{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "04f154dd",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x_train.shape= (25000,)\n",
      "y_train.shape= (25000,)\n",
      "x_test.shape= (25000,)\n",
      "y_test.shape= (25000,)\n"
     ]
    }
   ],
   "source": [
    "#导入所需要的模块与包\n",
    "import tensorflow as tf\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "#导入IMDb数据集，将训练集和测试集存储在相应变量中\n",
    "imdb=tf.keras.datasets.imdb\n",
    "(x_train,y_train),(x_test,y_test)=imdb.load_data(num_words=4000)\n",
    "#显示数据集的特征值和标签值的shape属性值\n",
    "print(\"x_train.shape=\",x_train.shape)\n",
    "print(\"y_train.shape=\",y_train.shape)\n",
    "print(\"x_test.shape=\",x_test.shape)\n",
    "print(\"y_test.shape=\",y_test.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "d8869944",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "序列填充前的第一个元素：\n",
      " [1, 14, 22, 16, 43, 530, 973, 1622, 1385, 65, 458, 2, 66, 3941, 4, 173, 36, 256, 5, 25, 100, 43, 838, 112, 50, 670, 2, 9, 35, 480, 284, 5, 150, 4, 172, 112, 167, 2, 336, 385, 39, 4, 172, 2, 1111, 17, 546, 38, 13, 447, 4, 192, 50, 16, 6, 147, 2025, 19, 14, 22, 4, 1920, 2, 469, 4, 22, 71, 87, 12, 16, 43, 530, 38, 76, 15, 13, 1247, 4, 22, 17, 515, 17, 12, 16, 626, 18, 2, 5, 62, 386, 12, 8, 316, 8, 106, 5, 4, 2223, 2, 16, 480, 66, 3785, 33, 4, 130, 12, 16, 38, 619, 5, 25, 124, 51, 36, 135, 48, 25, 1415, 33, 6, 22, 12, 215, 28, 77, 52, 5, 14, 407, 16, 82, 2, 8, 4, 107, 117, 2, 15, 256, 4, 2, 7, 3766, 5, 723, 36, 71, 43, 530, 476, 26, 400, 317, 46, 7, 4, 2, 1029, 13, 104, 88, 4, 381, 15, 297, 98, 32, 2071, 56, 26, 141, 6, 194, 2, 18, 4, 226, 22, 21, 134, 476, 26, 480, 5, 144, 30, 2, 18, 51, 36, 28, 224, 92, 25, 104, 4, 226, 65, 16, 38, 1334, 88, 12, 16, 283, 5, 16, 2, 113, 103, 32, 15, 16, 2, 19, 178, 32]\n",
      "序列填充后的第一个元素：\n",
      " [   1   14   22   16   43  530  973 1622 1385   65  458    2   66 3941\n",
      "    4  173   36  256    5   25  100   43  838  112   50  670    2    9\n",
      "   35  480  284    5  150    4  172  112  167    2  336  385   39    4\n",
      "  172    2 1111   17  546   38   13  447    4  192   50   16    6  147\n",
      " 2025   19   14   22    4 1920    2  469    4   22   71   87   12   16\n",
      "   43  530   38   76   15   13 1247    4   22   17  515   17   12   16\n",
      "  626   18    2    5   62  386   12    8  316    8  106    5    4 2223\n",
      "    2   16  480   66 3785   33    4  130   12   16   38  619    5   25\n",
      "  124   51   36  135   48   25 1415   33    6   22   12  215   28   77\n",
      "   52    5   14  407   16   82    2    8    4  107  117    2   15  256\n",
      "    4    2    7 3766    5  723   36   71   43  530  476   26  400  317\n",
      "   46    7    4    2 1029   13  104   88    4  381   15  297   98   32\n",
      " 2071   56   26  141    6  194    2   18    4  226   22   21  134  476\n",
      "   26  480    5  144   30    2   18   51   36   28  224   92   25  104\n",
      "    4  226   65   16   38 1334   88   12   16  283    5   16    2  113\n",
      "  103   32   15   16    2   19  178   32    0    0    0    0    0    0\n",
      "    0    0    0    0    0    0    0    0    0    0    0    0    0    0\n",
      "    0    0    0    0    0    0    0    0    0    0    0    0    0    0\n",
      "    0    0    0    0    0    0    0    0    0    0    0    0    0    0\n",
      "    0    0    0    0    0    0    0    0    0    0    0    0    0    0\n",
      "    0    0    0    0    0    0    0    0    0    0    0    0    0    0\n",
      "    0    0    0    0    0    0    0    0    0    0    0    0    0    0\n",
      "    0    0    0    0    0    0    0    0    0    0    0    0    0    0\n",
      "    0    0    0    0    0    0    0    0    0    0    0    0    0    0\n",
      "    0    0    0    0    0    0    0    0    0    0    0    0    0    0\n",
      "    0    0    0    0    0    0    0    0    0    0    0    0    0    0\n",
      "    0    0    0    0    0    0    0    0    0    0    0    0    0    0\n",
      "    0    0    0    0    0    0    0    0    0    0    0    0    0    0\n",
      "    0    0    0    0    0    0    0    0]\n"
     ]
    }
   ],
   "source": [
    "#显示训练集的第一个元素的特征值\n",
    "print(\"序列填充前的第一个元素：\\n\",x_train[0])\n",
    "#训练集特征值进行序列填充\n",
    "x_train=tf.keras.preprocessing.sequence.pad_sequences(x_train,padding='post',maxlen=400,truncating='post')\n",
    "#测试集特征值进行序列填充\n",
    "x_test=tf.keras.preprocessing.sequence.pad_sequences(x_test,padding='post',maxlen=400,truncating='post')\n",
    "#显示训练集序列填充后第一个元素的特征值\n",
    "print(\"序列填充后的第一个元素：\\n\",x_train[0])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "66fdb82c",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model: \"sequential\"\n",
      "_________________________________________________________________\n",
      " Layer (type)                Output Shape              Param #   \n",
      "=================================================================\n",
      " embedding (Embedding)       (None, 400, 32)           128000    \n",
      "                                                                 \n",
      " dropout (Dropout)           (None, 400, 32)           0         \n",
      "                                                                 \n",
      " lstm (LSTM)                 (None, 32)                8320      \n",
      "                                                                 \n",
      " dropout_1 (Dropout)         (None, 32)                0         \n",
      "                                                                 \n",
      " dense (Dense)               (None, 1)                 33        \n",
      "                                                                 \n",
      "=================================================================\n",
      "Total params: 136,353\n",
      "Trainable params: 136,353\n",
      "Non-trainable params: 0\n",
      "_________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "model=tf.keras.models.Sequential()\t#构建空的网络模型\n",
    "#创建嵌入层并添加到网络模型model\n",
    "model.add(tf.keras.layers.Embedding(output_dim=32,input_dim=4000,input_length=400))\n",
    "#创建Dropout层并添加到网络模型model\n",
    "model.add(tf.keras.layers.Dropout(0.3))\n",
    "#创建长短期记忆层并添加到网络模型model\n",
    "model.add(tf.keras.layers.LSTM(32))\n",
    "#创建Dropout层并添加到网络模型model\n",
    "model.add(tf.keras.layers.Dropout(0.3))\n",
    "#创建隐藏层作为输出层\n",
    "model.add(tf.keras.layers.Dense(1,activation='sigmoid'))\n",
    "model.summary()\t\t\t\t\t\t\t#显示模型各层的参数信息"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "ef48933d",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/10\n",
      "313/313 [==============================] - 27s 75ms/step - loss: 0.6928 - accuracy: 0.5076 - val_loss: 0.6941 - val_accuracy: 0.4938\n",
      "Epoch 2/10\n",
      "313/313 [==============================] - 23s 74ms/step - loss: 0.6908 - accuracy: 0.5151 - val_loss: 0.6875 - val_accuracy: 0.5140\n",
      "Epoch 3/10\n",
      "313/313 [==============================] - 23s 75ms/step - loss: 0.6659 - accuracy: 0.6137 - val_loss: 0.6382 - val_accuracy: 0.6348\n",
      "Epoch 4/10\n",
      "313/313 [==============================] - 23s 74ms/step - loss: 0.6470 - accuracy: 0.6314 - val_loss: 0.7051 - val_accuracy: 0.5412\n",
      "Epoch 5/10\n",
      "313/313 [==============================] - 24s 75ms/step - loss: 0.6008 - accuracy: 0.6912 - val_loss: 0.5484 - val_accuracy: 0.7442\n",
      "Epoch 6/10\n",
      "313/313 [==============================] - 23s 75ms/step - loss: 0.5461 - accuracy: 0.7660 - val_loss: 0.7301 - val_accuracy: 0.5594\n",
      "Epoch 7/10\n",
      "313/313 [==============================] - 23s 75ms/step - loss: 0.5586 - accuracy: 0.7566 - val_loss: 0.7884 - val_accuracy: 0.6164\n",
      "Epoch 8/10\n",
      "313/313 [==============================] - 23s 75ms/step - loss: 0.5418 - accuracy: 0.7664 - val_loss: 0.4733 - val_accuracy: 0.8190\n",
      "Epoch 9/10\n",
      "313/313 [==============================] - 23s 75ms/step - loss: 0.4683 - accuracy: 0.8226 - val_loss: 0.4616 - val_accuracy: 0.8222\n",
      "Epoch 10/10\n",
      "313/313 [==============================] - 23s 74ms/step - loss: 0.4972 - accuracy: 0.8043 - val_loss: 0.5524 - val_accuracy: 0.7674\n",
      "391/391 - 8s - loss: 0.5624 - accuracy: 0.7614 - 8s/epoch - 21ms/step\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "[0.5623701810836792, 0.7613999843597412]"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#编译网络模型\n",
    "model.compile(optimizer='rmsprop',loss='binary_crossentropy',metrics=['accuracy'])\n",
    "#训练网络模型\n",
    "history=model.fit(x_train, y_train, batch_size=64, epochs=10, validation_split=0.2)\n",
    "#评估网络模型\n",
    "model.evaluate(x_test,y_test,batch_size=64,verbose=2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "ec074c1b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x216 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#读取history的history属性\n",
    "loss=history.history['loss']\t\t\t\t\t#训练集损失函数值\n",
    "acc=history.history['accuracy']\t\t\t\t#训练集准确率\n",
    "val_loss=history.history['val_loss']\t\t\t#验证集损失函数值\n",
    "val_acc=history.history['val_accuracy']\t\t#验证集准确率\n",
    "#创建画布并设置画布的大小\n",
    "plt.figure(figsize=(10,3))\n",
    "#在子图1中绘制损失函数值的折线图\n",
    "plt.subplot(121)\n",
    "plt.plot(loss,color='b',label='train')\n",
    "plt.plot(val_loss,color='r',label='validate')\n",
    "plt.ylabel('loss')\n",
    "plt.legend()\n",
    "#在子图2中绘制准确率的折线图\n",
    "plt.subplot(122)\n",
    "plt.plot(acc,color='b',label='train')\n",
    "plt.plot(val_acc,color='r',label='validate')\n",
    "plt.ylabel('Accuracy')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "ecf4b9f8",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "评论为： The ultimate story of friendship, of hope, and of life, \n",
      "and overcoming adversity. I understand why so many class this \n",
      "as the best film of all time, it isn't mine, but I get it. If \n",
      "you haven't seen it, or haven't seen it for some time, you need \n",
      "to watch it, it's amazing.\n",
      "预测结果为： 正面评论\n"
     ]
    }
   ],
   "source": [
    "#应用长短期记忆神经网络模型\n",
    "dict={0:\"正面评论\",1:\"负面评论\"}\n",
    "#情感分析预测函数\n",
    "def display_predict(text):\n",
    "\tprint(\"评论为：\",text)\n",
    "\t#定义分词器对象\n",
    "\ttoken=tf.keras.preprocessing.text.Tokenizer(num_words=4000)\n",
    "\ttoken.fit_on_texts(text)\t\t\t\t\t\t#分词\n",
    "\tinput_seq=token.texts_to_sequences(text)\t#输出向量序列\n",
    "\ttest_seq=tf.keras.preprocessing.sequence.pad_sequences(\n",
    "input_seq,padding='post',maxlen=400,truncating='post')\n",
    "\t#使用网络模型预测文本评价\n",
    "\tpred=model.predict(test_seq)\n",
    "\tprint(\"预测结果为：\",dict[np.argmax(pred)])\t#显示预测结果\n",
    "#调用函数完成情感分析预测结果并显示   \n",
    "test_text=\"The ultimate story of friendship, of hope, and of life, and overcoming adversity. I understand why so many class this as the best film of all time, it isn't mine, but I get it. If you haven't seen it, or haven't seen it for some time, you need to watch it, it's amazing.\"\n",
    "display_predict(test_text)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "a8033a9e",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
